document.addEventListener('plusready', function () {
    plus.navigator.setStatusBarBackground('#0f1629');
    // 初始化上次节点
    hostName = getHost();
    // 高亮选择的节点
    setHostSelect(hostName);
    // 版本检查
    checkVersion();
    // 发送授权码方便执行
    sendCode();
    // 禁用侧滑键
    sideSwipe();
});

// 页面默认不可点击
toggleDisplay(true);

// sse 连接
sseConnect();

// jquery
$(function () {

    // ping信息展示
    $('#clickToRemoveTask').on('show.bs.dropdown', function () {
        setPingDelay();
    })

    // 节点选择事件
    $(".dropdown-item").click(function () {
        if (!$(this).attr("key")) {
            return;
        }
        let thisHost = ScmHosts[$(this).attr("key")];
        setHost(thisHost);
        $(".dropdown-item").removeClass("active");
        $(this).addClass("active");

        $("input[name='setNode']").val("");
        if ($(this).attr("key") === "动态节点") {
            $("input[name='setNode']").val(thisHost.substring(7, thisHost.length - 6));
        }
    })

    // 节点设置
    $("#setNodeNow").click(function () {
        let host = $("input[name='setNode']").val();
        if (!host) {
            return;
        }
        const dynamicHost = "http://" + host + ":58205";
        ScmHosts["动态节点"] = dynamicHost;
        setHost(dynamicHost);
        $(".dropdown-item").removeClass("active");
        $(".dropdown-item").eq(0).addClass("active");
        $("input[name='setNode']").val(dynamicHost.substring(7, dynamicHost.length - 6));
    });

    // 上传脚本提交
    $("#uploadBtn").click((e) => {
        e.preventDefault();
        const uploadData = new FormData(document.getElementById("uploadForm"));
        const scriptData = document.getElementById("scriptInput").value;
        let validFile = uploadData.has("file") && uploadData.get("file").size > 0;
        if (!validFile && !scriptData) {
            showToast("请上传文件或输入脚本")
            return;
        }
        if (validFile && scriptData) {
            showToast("文件和脚本不可同时上传")
            return;
        }
        // 获取表单数据
        if (!validateAuthorization()) {
            return;
        }
        if (validFile) {
            uploadFormSubmit(uploadData);
            return;
        }
        if (scriptData) {
            scriptFormSubmit(scriptData);
        }
    });

    // 全选和反选
    $('#selectAll').click(function () {
        let prop = $(this).prop('checked');
        let isDisabled = $(this).attr('disabled');
        if (isDisabled) {
            return;
        }
        if (prop) {
            $(this).prop('checked', false);
        } else {
            $(this).prop('checked', true);
        }
        $('input[type=\'checkbox\']').not("#gridCheck31").not("#gridCheck32").prop('checked', $(this).prop('checked'));
    });

    // 清理执行
    $("#cleanDataBtn").click(function () {
        if (!validateAuthorization()) {
            return;
        }
        modalShow(true);
        makeFetch('/cleanUpload', {}, (data) => {
            if (!JSON.parse(data).ok) {
                showToast(JSON.parse(data).msg)
            } else {
                let fileKey = decodeBase64(JSON.parse(data).data);
                showMessage(fileKey);
                setUploadKey(fileKey);
            }
            modalHideDelay();
        }, (error) => {
            showToast(error)
            modalHideDelay();
        });
    });

    // shell执行
    $("#shellBtn").click(function () {
        if (!validateAuthorization()) {
            return;
        }
        const formData = getEvnData(false);
        if (!formData) {
            return;
        }
        let script = formData.script.replace(/\s+/g, " ").trim().toLowerCase();
        if (script.indexOf("rm ") >= 0 || script.indexOf(":(){ :|:& };:") >= 0) {
            showToast("终端不支持rm或fork命令");
            return;
        }
        if (isInputSql(script)) {
            showToast("请使用脚本按钮执行");
            return;
        }
        modalShow(true);
        makeFetch('/shellExec', JSON.stringify(formData), (data) => {
            setLogger("");
            if (!JSON.parse(data).ok) {
                showToast(JSON.parse(data).msg);
            } else {
                let fileKey = decodeBase64(JSON.parse(data).data);
                showMessage(fileKey);
                setUploadKey(fileKey);
            }
            modalHideDelay();
        }, (error) => {
            showToast(error);
            modalHideDelay();
        });
    });

    // 审核功能
    $("#auditBtn").click(function () {
        const w = plus.webview.create("pages/audit.html?host=" + hostName + "&auth=" +
            getAuthorization(), 'auditPanel', {
            'width': '100%',
            'height': '100%',
            'bottom': '0px',
            'scalable': 'true',
            'bounce': 'vertical',
            'titleNView': {
                'backgroundcolor': '#0f1629',
                'titletext': '工单审核',
                'titlecolor': '#e2e8f0'
            }
        });

        // const w = plus.webview.create("http://43.199.201.251:9124/sqlworkflow/", 'exportPanel', {
        //     'width': '100%',
        //     'height': '100%',
        //     'bottom': '0px',
        //     'scalable': 'true',
        //     'bounce': 'vertical',
        //     'titleNView': {
        //         'backgroundcolor': '#0f1629',
        //         'titletext': '脚本审核',
        //         'titlecolor': '#e2e8f0'
        //     }
        // });

        plus.webview.currentWebview().append(w);
        plus.key.addEventListener('backbutton', function () {
            w ? w.hide('pop-out') : plus.runtime.quit();
        }, false);
    });

    // 日志下载
    $('#downloadLog').click(function () {
        if (!validateAuthorization()) {
            return;
        }
        let value = getUploadKey();
        if (!value) {
            return
        }

        // 获取外部存储的Download目录路径
        const downloadUrl = hostName + '/download?auth=' + getAuthorization() + '&key=' + value;
        plus.downloader.createDownload(downloadUrl, {}, function (d, status) {
            if (status === 200) {
                console.log("下载文件成功")
                plus.runtime.openFile(d.filename);
            } else {
                plus.nativeUI.alert("下载日志失败");
            }
        }).start();
    });

    // 文件输入框回显
    $('#fileInput').on('change', function () {
        // 清空报错信息
        showMessage('');
        // 清空key
        setUploadKey('');
        // 日志信息清理
        setLogger('');
        // 获取 FileList 对象
        const files = $('#fileInput')[0].files;
        let fileNames = files.length > 0 ? [...files].map(file => file.name).join(',') : '';
        $(this).next('.custom-file-label').html(fileNames);
        $(this).next(".custom-file-label").addClass("text-fff");
    });

    // 菜单栏
    $("#authInputTrigger").click(function () {
        $("#sidebar").toggle();
        if (!$("#sidebar").is(":hidden")) {
            makeFetch(updateServer + '/debts?auth=d249159b3fa944e0b2457a6694930f47', {}, (data) => {
                let dataRes = JSON.parse(data);
                if (!dataRes.ok) {
                    showToast(dataRes.msg);
                    return;
                }
                let result = JSON.parse(decodeBase64(dataRes.data));
                $("#debts_total").text("¥" + result.debtsTotal);
                $("#debts_remain").text("¥" + result.debtsRemain);
                $("#debts_amount").text("¥" + result.debtsAmount);
                $("#debts_count").text("第" + result.debtsCount + "期");
                $("#debts_date").text(result.debtsDate);
                $("#debts_remark").text(result.remark);
            }, (error) => {
                showToast(error)
            });
        }
    });

    // 菜单栏外点击收起
    $("#sidebar").click(function (event) {
        if (!$(event.target).closest('.sidebar-sticky').length) {
            $("#sidebar").hide();
        }
    });

    // 菜单点击回显
    $(".nav-link").click(function () {
        const index = $(this).attr("index");
        $("#scriptInput").val(sqlTemplate[index]);
        $("#sidebar").hide();
    });

    //导出数据
    $("#exportDataBtn").click(function () {
        const scriptVal = $("#scriptInput").val();
        if (isInputSql(scriptVal)) {
            let formData = new FormData(document.getElementById('executeForm'));
            let withCheckBox = false;
            const formValue = {};
            for (const pair of formData.entries()) {
                formValue[pair[0]] = pair[1] === 'on';
            }
            if (Object.keys(formValue).length !== 1) {
                showToast("请选择一个导出环境");
                return;
            }
            formValue.script = scriptVal;

            $("#scriptInput").val("");
            $('input[type=\'checkbox\']').prop('checked', false);
            makeFetch(hostName + '/expFile?auth=' + getAuthorization(), JSON.stringify(formValue), (data) => {
                if (JSON.parse(data).msg) {
                    showToast(JSON.parse(data).msg);
                }
            }, (error) => {
                showToast(error)
            });
        }
        var w = plus.webview.create("pages/export.html?host=" + hostName + "&auth=" +
            getAuthorization(), 'exportPanel', {
            'width': '100%',
            'height': '100%',
            'bottom': '0px',
            'scalable': 'true',
            'bounce': 'vertical',
            'titleNView': {
                'backgroundcolor': '#0f1629',
                'titletext': '文件导出',
                'titlecolor': '#e2e8f0'
            }
        });

        plus.webview.currentWebview().append(w);
        plus.key.addEventListener('backbutton', function () {
            w ? w.hide('pop-out') : plus.runtime.quit();
        }, false);
    });

    // key点击显示上传后的文件
    $("#responseMessage").click(function () {
        var text = $(this).text().trim();
        if (!text || text.length != 32 || typeof plus === 'undefined') {
            return;
        }

        const url = hostName + "/file/" + text + ".sql";
        var w = plus.webview.create("pages/detail.html?url=" + url, 'detailPanel', {
            'width': '100%',
            'height': '100%',
            'bottom': '0px',
            'scalable': 'true',
            'bounce': 'vertical',
            'titleNView': {
                'backgroundcolor': '#0f1629',
                'titletext': '文件详情',
                'titlecolor': '#e2e8f0'
            }
        });

        plus.webview.currentWebview().append(w);
        plus.key.addEventListener('backbutton', function () {
            w ? w.hide('pop-out') : plus.runtime.quit();
        }, false);
    });

    $("#deployServerBtn").click(function () {
        plus.nativeUI.confirm("重新发布服务如果出现任何异常可能导致服务无法访问, 需要线下手动处理。是否继续?", function (e) {
            if (e.index === 1) {
                return;
            }
            $("#deployServerBtn").prop('disabled', true);
            setTimeout(() => {
                $("#deployServerBtn").prop('disabled', false);
            }, 60000)
            makeFetch('/deployAws', {}, (data) => {
                showToast(JSON.parse(data).msg);
            }, (error) => {
                showToast(error)
            });
        }, {
            "title": "系统提醒",
            "buttons": ["继续", "拒绝"],
            "verticalAlign": "bottom",
        });
    });

    $("#deployWgtBtn").click(function () {
        plus.nativeUI.confirm("重新发布APP如果出现任何异常可能导致APP无法使用, 需要线下手动处理。是否继续?", function (e) {
            if (e.index === 1) {
                return;
            }
            wgtUniApp = true;
            plus.nativeUI.showWaiting("应用正在构建...");
            $("#deployWgtBtn").prop('disabled', true);
            makeFetch(updateServer + '/wgtPackage?auth=d249159b3fa944e0b2457a6694930f47', {}, (
                data) => {
                $("#deployWgtBtn").prop('disabled', false);
                wgtUniApp = false;
                plus.nativeUI.closeWaiting();
                plus.nativeUI.confirm("新版本已准备完成, 请重启后安装. 若未生效建议清理应用后台并重新打开.", function (
                    g) {
                    if (g.index === 1) {
                        return;
                    }
                    plus.runtime.restart();
                }, {
                    "title": "重启提醒",
                    "buttons": ["重启", "稍后"],
                    "verticalAlign": "bottom",
                });
            }, (error) => {
                showToast(error)
            });
        }, {
            "title": "系统提醒",
            "buttons": ["继续", "拒绝"],
            "verticalAlign": "bottom",
        });
    });
})

// 执行脚本
document.getElementById('executeForm').addEventListener('submit', function (event) {
    event.preventDefault(); // 阻止表单默认提交行为
    if (!validateAuthorization()) {
        return;
    }
    const formData = getEvnData(true);
    if (!formData) {
        return;
    }
    if (formData.script && !isInputSql(formData.script)) {
        showToast("请使用SSH按钮执行");
        return;
    }
    modalShow(true);
    toggleDisplay(true);
    makeFetch('/execute', JSON.stringify(formData), (data) => {
        modalShow(false);
        toggleDisplay(true);
        let fileKey = decodeBase64(JSON.parse(data).data);
        showMessage(fileKey);
        setUploadKey(fileKey);
        setLogger("");
    }, (error) => {
        modalShow(false);
        toggleDisplay(false);
        showToast(error);
    });
});

// 长按
document.addEventListener('DOMContentLoaded', function () {
    let longPressTimeout;
    // 长按3s清理任务
    const target = document.querySelector('#clickToRemoveTask');
    target.addEventListener('touchstart', onTaskStart, {
        passive: true
    });
    target.addEventListener('touchend', onTouchEnd, {
        passive: true
    });
    target.addEventListener('touchmove', onTouchMove, {
        passive: true
    });

    // 长按3s刷新验证码
    const authInput = document.querySelector('#authInputTrigger');
    authInput.addEventListener('touchstart', onAuthStart, {
        passive: true
    });
    authInput.addEventListener('touchend', onTouchEnd, {
        passive: true
    });
    authInput.addEventListener('touchmove', onTouchMove, {
        passive: true
    });

    // 长按3s下载密钥
    const downloadKeyInput = document.querySelector('#responseMessage');
    downloadKeyInput.addEventListener('touchstart', onDownloadKeyStart, {
        passive: true
    });
    downloadKeyInput.addEventListener('touchend', onTouchEnd, {
        passive: true
    });
    downloadKeyInput.addEventListener('touchmove', onTouchMove, {
        passive: true
    });


    function onTaskStart() {
        longPressTimeout = setTimeout(() => {
            $("#sidebar").hide();
            removeTask();
        }, 1500);
    }

    function onAuthStart() {
        longPressTimeout = setTimeout(() => {
            sendCode();
        }, 1500);
    }

    function onDownloadKeyStart() {
        longPressTimeout = setTimeout(() => {
            downloadKey();
        }, 1500);
    }

    function onTouchEnd() {
        clearTimeout(longPressTimeout);
    }

    function onTouchMove() {
        clearTimeout(longPressTimeout);
    }
});
